<template>
  <div class="app-container">
    <el-card shadow="always" :body-style="{ padding: '20px' }">
      <div slot="header">
        <span>批量导入员工</span>
      </div>
      <!-- card body -->
      <UpLoadExcel :before-upload="beforeUpload" :on-success="onSuccess" />
    </el-card>
  </div>
</template>

<script>
import { formatExcelDate } from '@/utils/index.js'
import { importEmployeesAPI } from '@/api/employee.js'
export default {
  name: 'Import',
  methods: {
    beforeUpload(file) {
      console.log(file)
      return true
    },
    async onSuccess(res) {
      this.transFormList(res.results)
      console.log(this.transFormList(res.results))
      await importEmployeesAPI(this.transFormList(res.results))
      this.$message.success('导入成功！')
      this.$router.back()
    },
    // 转换数据格式，因为excel表格中的数据与后台所需要的格式不一样
    transFormList(excleResult) {
      // 命名一个数据字典，对照转换
      const userRelations = {
        '入职日期': 'timeOfEntry',
        '聘用形式': 'formOfEmployment',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber',
        '部门': 'departmentName'
      }
      // 准备一个空数组，将转换的结果保存
      const newArray = []
      // 将函数引入的文件拿到并且进行遍历，item是每一行的数据
      excleResult.forEach(item => {
        // 准备一个空对象，将转换后的对象进行保存
        const userInfo = {}
        // 循环遍历每一行的数据，提取key，这时我们拿到的是中文的键
        for (const zhKey in item) {
          // 通过关系对照表我们拿到响应的英文键
          const enKey = userRelations[zhKey]
          // 判断，如果键值为两个时间值时
          if (enKey === 'timeOfEntry' || enKey === 'correctionTime') {
            // 对时间值进行转换，然后对空对象进行填充，以英文键为对象中的键，以原数据的中文键为对象中的值
            userInfo[enKey] = formatExcelDate(item[zhKey], '-')
            // 如果不是则直接赋值给空对象，同样的道理
          } else {
            userInfo[enKey] = item[zhKey]
          }
        }
        // 将对象追加给数组
        newArray.push(userInfo)
      })
      // 返回该数组
      return newArray
    }
  }
}
</script>

<style lang="scss" scoped>

</style>
